﻿#region

using System;
using System.IO;
using System.Windows.Forms;
using APP_PGM.DB;
using APP_PGM.GUI.Formularze;
using APP_PGM.GUI.Pomocnicze;
using Obsluga.Gui;
using WMAAN.Gui.Formularze.Logowanie;
using WMAAN.Uzytki;
using WMAAN.Uzytki.Kryptografia;
using WMAAN.Wyliczenia;

#endregion

namespace APP_PGM.GUI.Kontrolki
{
    public partial class ControlLogowanie : UserControl
    {
        public ControlLogowanie()
        {
            InitializeComponent();
        }

        public void AutoLogin()
        {
            string sciezkaPlikuLogowania = @"C:\pgm.pwd";
            if (File.Exists(sciezkaPlikuLogowania))
            {
                string[] linie = File.ReadAllLines(sciezkaPlikuLogowania);
                if (linie.Length == 2)
                {
                    ZalogujUzytkownika(linie[0], linie[1]);
                }
            }
        }

        private void ControlLogowanie_Resize(object sender, EventArgs e)
        {
            pnlLogowanie.Left = (Width - pnlLogowanie.Width)/2;
            pnlLogowanie.Top = (Height - pnlLogowanie.Height)/2;
        }

        private void linkResetHasla_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            FormResetHasla frmResetHasla = new FormResetHasla();

            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtLogin, "Proszę wprowadzić login",
                                               TypWalidacjiDanych.BRAK_TEKSTU);
            if (!string.IsNullOrEmpty(prvObslugaBledow.GetError(txtLogin)))
            {
                return;
            }
            bool wynik = frmResetHasla.init(txtLogin.Text.Trim().ToLower());
            if (wynik)
            {
                frmResetHasla.ShowDialog(this);
            }
        }

        private void btnZaloguj_Click(object sender, EventArgs e)
        {
            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtLogin, "Proszę wprowadzić login",
                                               TypWalidacjiDanych.BRAK_TEKSTU);

            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtHaslo, "Proszę wprowadzić hasło",
                                               TypWalidacjiDanych.BRAK_TEKSTU);

            if (!string.IsNullOrEmpty(prvObslugaBledow.GetError(txtLogin))
                &&
                !string.IsNullOrEmpty(prvObslugaBledow.GetError(txtHaslo)))
            {
                return;
            }

            ZalogujUzytkownika(txtLogin.Text, txtHaslo.Text);
        }

        private void ZalogujUzytkownika(string login, string haslo)
        {
            PGM baza = PGM.Instancja();
            
            DataSet_PGM.uzytkownicyRow[] uzytkownicyRow = (DataSet_PGM.uzytkownicyRow[]) baza.dane.uzytkownicy.Select(
                string.Format("login = '{0}' AND zablokowany = 0", login));
            if (uzytkownicyRow.Length == 0)
            {
                Komunikaty.pokazBlad(
                    "Użytkownik został usunięty lub jest zablokowany.\nSkontaktuj się z administratorem");
                return;
            }

            if (uzytkownicyRow[0].haslo.Deszyfruj() != haslo)
            {
                Komunikaty.pokazBlad("Niepoprawne hasło. Brak dostępu");
                return;
            }
            DaneGlobalne.Uzytkownik = uzytkownicyRow[0];

            OnZalogowanoUzytkownika(new ZalogowanoUzytkownikaHandlerArgs(DaneGlobalne.Uzytkownik));
        }

        private void btnZakoncz_Click(object sender, EventArgs e)
        {
            DialogResult odp = Komunikaty.pokazPytanie("Czy napewno chcesz zamknąc aplikację?");
            if (odp == DialogResult.Yes)
            {
                Application.Exit();
            }
        }


        public event ZalogowanoUzytkownikaHandler ZalogowanoUzytkownika;

        public void OnZalogowanoUzytkownika(ZalogowanoUzytkownikaHandlerArgs args)
        {
            ZalogowanoUzytkownikaHandler handler = ZalogowanoUzytkownika;
            if (handler != null) handler(this, args);
        }

        public delegate void ZalogowanoUzytkownikaHandler(object sender, ZalogowanoUzytkownikaHandlerArgs args);

        public class ZalogowanoUzytkownikaHandlerArgs
        {
            public string Imie;
            public string Nazwisko;
            public string Uprawnienie;
            public string Oddzial;

            public ZalogowanoUzytkownikaHandlerArgs(DataSet_PGM.uzytkownicyRow uzytkownicyRow)
            {
                Imie = uzytkownicyRow.imie;
                Nazwisko = uzytkownicyRow.nazwisko;
                Uprawnienie = uzytkownicyRow.uprawnieniaRow.nazwa;
                Oddzial = uzytkownicyRow.oddzialyRow.nazwa;
            }
        }


        public void Wyczysc()
        {
            txtLogin.Text = string.Empty;
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Console.WriteLine(txtHaslo.Text.Szyfruj());
        }

        private void txtLogin_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Return)
            {
                WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtLogin, "Proszę wprowadzić login",
                                               TypWalidacjiDanych.BRAK_TEKSTU);

                WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtHaslo, "Proszę wprowadzić hasło",
                                                   TypWalidacjiDanych.BRAK_TEKSTU);

                if (!string.IsNullOrEmpty(prvObslugaBledow.GetError(txtLogin))
                    &&
                    !string.IsNullOrEmpty(prvObslugaBledow.GetError(txtHaslo)))
                {
                    return;
                }

                ZalogujUzytkownika(txtLogin.Text, txtHaslo.Text);
            }
        }

        private void txtHaslo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Return)
            {
                WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtLogin, "Proszę wprowadzić login",
                                               TypWalidacjiDanych.BRAK_TEKSTU);

                WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtHaslo, "Proszę wprowadzić hasło",
                                                   TypWalidacjiDanych.BRAK_TEKSTU);

                if (!string.IsNullOrEmpty(prvObslugaBledow.GetError(txtLogin))
                    &&
                    !string.IsNullOrEmpty(prvObslugaBledow.GetError(txtHaslo)))
                {
                    return;
                }

                ZalogujUzytkownika(txtLogin.Text, txtHaslo.Text);
            }
        }
    }

    
}